<?php
/**
 * 
 * 助手类
 * @author yucy<yucy1985@gmail.com>
 *
 */
class YucyHelper
{
	/**
	 * 返回缓存对象
	 *
	 * @param Array $config array('type'=>'file', 'options' = array())
	 * @return Cache
	 */
	public function getCache($config)
	{
	    if (!YucyAutoloader::load('CacheHelper')) return false;
	    
	    //取得缓存对象实例
	    return CacheHelper::factory($config);
	}
	
	
	/**
	 * 
	 * 获取数据库操作对象
	 * @param array $config
	 * @param bool $pconnect
	 * @return Db
	 */
	public function getDb($config, $pconnect = false)
	{
		if (!YucyAutoloader::load('DbHelper')) return false;
		return DbHelper::factory($config, $pconnect);
	}
	
	
	/**
	 * 
	 * 获得视图对象
	 * @param string $engine
	 * @return View
	 */
	public function getView($engine = '')
	{
		if (!YucyAutoloader::load('ViewHelper')) return null;
		return ViewHelper::factory($engine);
	}
	
	
	/**
	 * 
	 * 获得日志对象
	 * @param string $engine
	 */
	public function getLogger($engine = '')
	{
		if (!YucyAutoloader::load('LoggerHelper')) return null;
		return LoggerHelper::factory($engine);
	}
	
	
	/**
	 * 
	 * 魔术方法，实现助手扩展
	 * @param string $method
	 * @param mixed $args
	 * @throws YucyException
	 * @return object
	 */
	public function __call($method, $args = '')
	{
		$_method = substr($method, 3) . 'Helper';
		
		YucyAutoloader::load($_method);
		
		$obj = $_method::factory($args);
		if ($obj instanceof YucyAbsHelper) return $obj;
		
		throw new YucyException("{$_method}类必须继承[YucyAbsHelper]类", 61);
	}
}


/**
 * 
 * 助手功能的扩展接口, 所有扩展必须继承些接口类
 *
 */
abstract class YucyAbsHelper
{
	public static function factory(){}
}